package com.ai.fupincore.dynamicDataSoure;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

import com.ai.frame.logger.Logger;
import com.ai.frame.logger.LoggerFactory;

/**
 * @ClassName: DataSourceAspect
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author zhoubin
 * @date 2016年4月27日 下午4:14:48
 * 
 */

public class DataSourceAspect implements MethodBeforeAdvice, AfterReturningAdvice {
	private static final Logger LOGGER = LoggerFactory.getActionLog(DataSourceAspect.class);
	/**
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param returnValue
	 * @param method
	 * @param args
	 * @param target
	 * @throws Throwable
	 * @author zhoubin
	 * @date 2016年4月27日 下午4:14:59
	 */
	public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
		DynamicDataSourceHolder.putDataSource("master");
	}

	/**
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param method
	 * @param args
	 * @param target
	 * @throws Throwable
	 * @author zhoubin
	 * @date 2016年4月27日 下午4:14:54
	 */
	public void before(Method method, Object[] args, Object target) throws Throwable {
		try {
			if (method != null && method.isAnnotationPresent(DataSource.class)) {
				DataSource data = method.getAnnotation(DataSource.class);
				DynamicDataSourceHolder.putDataSource(data.value());
			} else if (method != null) {
				DynamicDataSourceHolder.putDataSource("master");
			}
		} catch (Exception e) {
			DynamicDataSourceHolder.putDataSource("master");
			LOGGER.info("DataSourceAspect","切库",e);
		}
	}

}